package cn.itcast.aop;

import cn.itcast.pojo.Dept;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.springframework.stereotype.Component;

@Slf4j
@Component
//@Aspect
public class RecordTimeAspect {

    @Around("execution(* cn.itcast.service.DeptService.*(..))")
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {

        // 1. 先记录开始时间（确保所有预处理都纳入耗时统计）
        long start = System.currentTimeMillis();

        //获取方法，名字
        String name = joinPoint.getSignature().getName();

        //对单独的save禁止参数增强
        Object[] args = joinPoint.getArgs();
        if (name.equals("save")){
            //确定是第一个参数
            Dept dept = (Dept) args[0];
            dept.setName(dept.getName()+"aop增强");
        }


        //调用方法（获取返回值）
        Object proceed = joinPoint.proceed(args);

        long end = System.currentTimeMillis();

        log.info("-----------"+name+"执行耗时"+(end-start)+"ms");
        return proceed;
    }
}
